#include <stdio.h>
#include <unistd.h>
#include <signal.h>

// 测试信号捕捉函数的第二种
// int sigaction(int signum,  const struct sigaction *act, struct sigaction *oldact); 

// 设置一个struct sigaction对象存放oldact
struct sigaction oldact;

// 定义信号操作函数
void sigcb(int sig)
{
    printf("当前执行的是：%d号信号\n",sig);
    // 再次调用sigaction函数将信号操作还原
    sigaction(sig,&oldact,NULL);
}

int main()
{
    // 1.调用sigaction函数 自定义1号信号的操作函数
    // 定义参数struct sigaction结构体对象
    struct sigaction act;
    // 定义操作函数
    act.sa_handler = sigcb;
    // 将未初始化的位图act.sa_mask内存置为0，放置后续误导进程收到信号
    sigemptyset(&act.sa_mask);

    sigaction(1,&act,&oldact);

    // 2.让程序进入死循环，等待进程收到2号信号，观察触发的信号操作
    while(1)
    {
        sleep(1);
    }

    return 0;
}
